Linux下使用iptables实现内网的ftp端口映射

        有两台机器,其中一台A 有内网和外网,B机器只有内网。

        想达到的目的: 通过A机器的外网去访问B机器的ftp(21)

        环境

        A机器外网IP为 123.234.12.22(eth1) 内网IP为 192.168.10.20 (eth0)

        B机器内网为 192.168.10.21

        实现方法

  1. 让你的linux支持ftp的端口转发
    modprobe ip_nat_ftp ,加载ip_nat_ftp模块(若没有编译进内核),以使ftp能被正确NAT
             modprobe ip_conntrack_ftp ,加载ip_conntrack_ftp模块

  2. 在A机器上打开端口转发功能

1
vi /etc/sysctl.conf

        使 net.ipv4.ip_forward = 1

1
sysctl -p
  1. 在A机器上创建iptables规则
1
iptables -t nat -I PREROUTING -d 123.234.12.22 -p tcp --dport 21 -j DNAT --to 192.168.10.21:21

        把访问外网21端口的包转发到内网ftp服务器

1
iptables -t nat -I POSTROUTING -d 192.168.10.21 -p tcp --dport 21 -j SNAT --to 192.168.10.20

        把到内网ftp服务器的包回源到内网网卡上,不然包只能转到ftp服务器,而返回的包不能到达客户端